package com.sailing.xjpb.common.encrypt;


/**
 * 数据源密码解密接口
 *
 * @author sutao
 * createDate 2022/10/15 21:04
 */
public interface PasswordDecodeHandler {


    /**
     * 判断bean是否支持解密
     *
     * @param bean spring容器中的bean
     * @return boolean 是否被加密过
     */
    default boolean isSupported(Object bean) {
        return this.getSupportClass() == bean.getClass();
    }

    /**
     * 获取当前解密实现类支持的解密类型
     *
     * @return 支持的bean对象类型
     * @author sutao
     */
    Class getSupportClass();

    /**
     * 解密方法 目前支持redisProperties Neo4jRoutingProperties HikariDataSource
     *
     * @param decodeKey 解密的key
     * @param bean      需要被解密的实例
     */
    void decode(String decodeKey, Object bean);

}
